package com.components.cachewebview.config

import android.text.TextUtils
import kotlin.collections.HashSet

object CacheExtensionConfig {

    private var STATIC: HashSet<String> = object : HashSet<String>() {
        init {
            add("html")
            add("htm")
            add("js")
            add("ico")
            add("css")
            add("png")
            add("jpg")
            add("jpeg")
            add("gif")
            add("bmp")
            add("ttf")
            add("woff")
            add("woff2")
            add("otf")
            add("eot")
            add("svg")
            add("xml")
            add("swf")
            add("txt")
            add("text")
            add("conf")
            add("webp")
        }
    }

    private var NO_CACHE: java.util.HashSet<String> = object : java.util.HashSet<String>() {
        init {
            add("mp4")
            add("mp3")
            add("ogg")
            add("avi")
            add("wmv")
            add("flv")
            add("rmvb")
            add("3gp")
        }
    }

    //单独webView实例的
    private val statics: HashSet<String> = HashSet<String>(STATIC)
    private val no_cache: HashSet<String> = HashSet<String>(NO_CACHE)

    /**外部调用增*/
    fun addGlobalExtension(extension: String) {
        add(STATIC, extension)
    }

    /**外部调用删*/
    fun removeGlobalExtension(extension: String) {
        remove(STATIC, extension)
    }

    /**内部调用增*/
    private fun add(set: HashSet<String>, extension: String) {
        if (!TextUtils.isEmpty(extension)) {
            set.add(extension.replace(".", "").lowercase().trim())
        }
    }

    /**内部调用删*/
    private fun remove(set: HashSet<String>, extension: String) {
        if (!TextUtils.isEmpty(extension)) {
            set.remove(extension.replace(".", "").lowercase().trim())
        }
    }

    /**判断是否是媒体信息*/
    fun isMedia(extension: String): Boolean {
        if (TextUtils.isEmpty(extension)) {
            return false
        }
        if (NO_CACHE.contains(extension)) {
            return true
        }
        return no_cache.contains(extension.lowercase().trim())
    }

    fun canCache(extension: String): Boolean {
        if (TextUtils.isEmpty(extension)) {
            return false
        }
        if (STATIC.contains(extension.lowercase().trim())) {
            return true
        }
        return statics.contains(extension)
    }

    fun addExtension(extension: String): CacheExtensionConfig {
        add(statics, extension)
        return this
    }

    fun removeExtension(extension: String): CacheExtensionConfig {
        remove(statics, extension)
        return this
    }

    fun isHtml(extension: String): Boolean {
        if (TextUtils.isEmpty(extension)) {
            return false
        }
        if (extension.lowercase().trim().contains("html") ||
            extension.lowercase().trim().contains("htm")
        ) {
            return true
        }
        return false
    }

    fun clearAll() {
        statics.clear()
    }

}